AWS Control Tower のコントロール一覧をCSV化してみる【AWS CLI】

AWS Control Tower のコントロール一覧をCSV化してみる【AWS CLI】

Clock Icon2024.08.13

以下アップデートにより、API から 「Control Tower の各コントロールの内容」を参照できるようになりました。

https://dev.classmethod.jp/articles/aws-control-tower-new-descriptive-control-apis/

早速 この API を使って Control Tower のコントロール一覧を作ってみます。

※ちなみに、AWS公式ドキュメントでは Controls Reference Guide というものが提供されており、 そこから各種情報も閲覧できます。

コントロール一覧(CSV)

controlcatalog list-controls および controlcatalog get-control を使って情報を取得しました。 以下 Gist に結果を載せています。

https://gist.github.com/MasahiroKawahara/3960903fd4f7e492d8b5cce0bf09db84

CSVは以下項目をまとめたものです。

  • コントロール名
  • コントロールの動作(Behavior)
  • コントロールのスコープ(Scope)
  • 東京リージョンでのサポート有無 (※ Scope = REGIONAL の場合)
  • 大阪リージョンでのサポート有無 (※ Scope = REGIONAL の場合)
  • バージニア北部リージョンでのサポート有無 (※ Scope = REGIONAL の場合)

適宜スプレッドシートなどで加工、フィルタください。

sc_2024-08-13_07-04-43_6797

内容を見てみる

コントロール数

全部で 513のコントロールがあります。 動作ごとの内訳は以下のとおり。

コントロール数
検出 229
プロアクティブ 235
予防 49
合計 513

リージョンごとの対応

検出/プロアクティブコントロールのスコープは全て REGIONAL です。 リージョンごとに対応/非対応があります。 なお、予防コントロールは全て GLOBAL です。

以下、リージョンごとのコントロール対応数です。

東京 大阪 バージニア北部
検出(全229) 229 117 226
プロアクティブ(全235) 235 235 235

プロアクティブコントロールは東京、大阪、バージニア北部の全てで対応していました。

大阪では検出コントロールが他に比べて少なめです。

基本的に東京、バージニア北部では全コントロールがサポートされています。 ただし、なぜかバージニア北部にて以下3つが未サポートでした。

sc_2024-08-13_07-28-34_17348

実際にマネコンでも「デプロイ不可」でした。

sc_2024-08-10_09-38-41_30286

対象のAWSサービス

荒い調査ですが「コントロール名に含まれるAWSサービス」ランキングを調べました。

▼ 含まれるAWSサービス名TOP10(全コントロール)

AWSサービス このサービス名を含む
コントロール数
RDS 55
EC2 54
S3 45
IAM 26
VPC 21
CloudWatch 21
ECS 19
Redshift 18
EBS 15
CloudTrail 15

▼ 含まれるAWSサービス名TOP10(検出コントロール)

AWSサービス このサービス名を含む
コントロール数
RDS 25
EC2 21
S3 18
IAM 15
VPC 13
Redshift 9
Neptune 8
ECS 7
EBS 7
CloudTrail 7

▼ 含まれるAWSサービス名TOP10(プロアクティブコントロール)

AWSサービス このサービス名を含む
コントロール数
RDS 30
EC2 29
S3 17
CloudWatch 13
ECS 12
CloudFront 11
Redshift 9
IAM 9
EC2 Auto Scaling 9
Auto Scaling 9

▼ 含まれるAWSサービス名TOP10(予防コントロール)

AWSサービス このサービス名を含む
コントロール数
Control Tower 13
S3 10
Config 9
EC2 4
EBS 4
CloudTrail 4
Lambda 3
CloudWatch 3
IAM 2
CloudFormation 2

おわりに

Control Tower のコントロール一覧をCSVにしてみました。

ちなみにマネジメントコンソールからコントロール一覧を見たほうが情報量が多いです。

sc_2024-08-13_07-56-06_20505

今回のコントロール一覧をざっと見て、気になるものがあれば マネジメントコンソールで詳細を確認するのが良いでしょう。

以上、参考になれば幸いです。

参考

https://docs.aws.amazon.com/ja_jp/controltower/latest/controlreference/introduction.html
https://docs.aws.amazon.com/cli/latest/reference/controlcatalog/list-controls.html
https://docs.aws.amazon.com/cli/latest/reference/controlcatalog/get-control.html
https://dev.classmethod.jp/articles/aws-control-tower-new-descriptive-control-apis/

補足

CSV生成のスクリプト

output_file="./ct-all-controls.csv"

echo '"Name","Behavior","Scope","ap-northeast-1","ap-northeast-3","us-east-1"' > $output_file

aws controlcatalog list-controls --output text \
  --query "Controls[].[Arn]" \
| while read arn; do
    control=$(aws controlcatalog get-control --control-arn $arn --output json)

    # コントロール名 ( ["] は [""] にエスケープ )
    c_name=$(echo "$control" | jq -r '.Name' | sed -r 's/\"/""/g')

    # 挙動
    c_behavior=$(echo "$control" | jq -r '.Behavior')

    # スコープ
    c_scope=$(echo "$control" | jq -r '.RegionConfiguration.Scope')

    # リージョン情報取得
    regions="-"
    if [[ "$c_scope" = "REGIONAL" ]] ; then
      regions=$(echo "$control" | jq -r '.RegionConfiguration.DeployableRegions | join("\t")')
    fi

    # 東京リージョン対応しているか
    apn1="-"
    if [[ "$regions" == *ap-northeast-1* ]] ; then
      apn1="supported"
    fi

    # 大阪リージョン対応しているか
    apn3="-"
    if [[ "$regions" == *ap-northeast-3* ]] ; then
      apn3="supported"
    fi

    # バージニア北部リージョン対応しているか
    use1="-"
    if [[ "$regions" == *us-east-1* ]] ; then
      use1="supported"
    fi

    # 出力
    echo "\"${c_name}\",\"${c_behavior}\",\"${c_scope}\",\"${apn1}\",\"${apn3}\",\"${use1}\"" >> $output_file
  done

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.